import { Injectable } from '@angular/core';
import {ModalOptionsForService, NzModalService} from 'ng-zorro-antd';
import { Observable } from 'rxjs/Observable';

/**
 * 对话框辅助类
 */
@Injectable()
export class MyModalHelper {

    constructor(private modalSrv: NzModalService) { }

    /**
     * 打开对话框，默认会过滤一些事件的回调，因此更容易处理回调：
     * this.modalHelper.open(FormEditComponent, { i }).subscribe(res => this.load());
     *
     * 对于组件的成功&关闭的处理说明：
     * 成功：
     *  this.NzModalRef.close(data);
     *  this.NzModalRef.close(true);
     *
     * 关闭：
     * this.NzModalRef.destroy();
     *
     * 关闭对话框需要进一步操作，可根据关闭返回数据情况进行判断下一步操作
     *
     *
     * @param {*} comp 组件
     * @param {*} [params] 组件参数
     * @param {('sm' | 'lg' | '' | number)} [size='lg'] 大小；例如：lg、600，默认：lg
     * @param options 对话框 `ModalOptionsForService` 参数
     */
    open(comp: any, params?: any, size: 'sm' | 'lg' | '' | number = 'lg', options?: ModalOptionsForService): Observable<any> {
        let cls = '', width = '';
        if (size) {
            if (typeof size === 'number')
                width = `${size}px`;
            else
                cls = `modal-${size}`;
        }
        return this.modalSrv
            .create(Object.assign({
              nzWrapClassName: cls,
              nzContent: comp,
              nzWidth: width ? width : undefined,
              nzFooter: null,
              nzComponentParams: params
            }, options)).afterClose;
    }

    /**
     * 静态框，点击蒙层不允许关闭
     */
    static(comp: any, params?: any, size: 'sm' | 'lg' | '' | number = 'lg', options?: any): Observable<any> {
        return this.open(comp, params, size, Object.assign({
            nzMaskClosable: false
        }, options));
    }
}
